发布于 2022-04-14
Node.js - File System
nodejsjavascript
File System是一个文件系统模块,用于操作文件系统。
Node.js提供了一个fs模块,用于操作文件系统。通过fs模块,可以读取文件,创建文件,删除文件,移动文件,复制文件等。
const fs = require('fs')sync 和 async
fs模块中的每个方法都有sync和async两种形式。异步方法会返回一个Promise对象,而同步方法会返回一个callback。
echo "hello world" > demo.txtconst fs = require('fs')
// 异步读取文件
fs.readFile('demo.txt', function (err, data) {
if (err) {
return console.error(err)
}
console.log('Asynchronous read: ' + data.toString())
})
// 同步读取文件
var data = fs.readFileSync('demo.txt')
console.log('Synchronous read: ' + data.toString())
console.log('Program Ended')打开文件
语法:fs.open(path, flags, [mode], callback)
path: 文件路径flags: 打开文件的方式,可以是r,r+,w,w+,a,a+,x,x+,t,t+,c,c+mode: 打开文件的模式,默认是0o666callback: 回调函数,参数为 err,fd
const fs = require('fs')
fs.open('demo.txt', 'r', function (err, fd) {
if (err) {
return console.error(err)
}
console.log('文件打开成功,文件描述符:' + fd)
})获取文件信息
语法:fs.stat(path, callback)
path: 文件路径callback: 回调函数,参数为 err,stats
方法:
stats.isFile(): 判断是否是文件stats.isDirectory(): 判断是否是目录stats.isBlockDevice(): 判断是否是块设备stats.isCharacterDevice(): 判断是否是字符设备stats.isSymbolicLink(): 判断是否是符号链接stats.isFIFO(): 判断是否是 FIFO,如果是 FIFO,则返回 true,否则返回 falsestats.isSocket(): 判断是否是 Socket
const fs = require('fs')
fs.stat('demo.txt', function (err, stats) {
if (err) {
return console.error(err)
}
console.log(stats)
console.log('文件类型:' + stats.isFile())
console.log('文件大小:' + stats.size)
console.log('文件创建时间:' + stats.birthtime)
})写入文件
语法:fs.writeFile(file, data, [options], callback)
file: 文件路径data: 写入的数据options: 可选参数,可以是encoding,mode,flagcallback: 回调函数,参数为 err
const fs = require('fs')
fs.writeFile('demo.txt', '我是写入的文件内容', function (err) {
if (err) {
return console.error(err)
}
console.log('数据写入成功!')
console.log('--------我是分割线-------------')
console.log('读取写入的数据!')
fs.readFile('demo.txt', function (err, data) {
if (err) {
return console.error(err)
}
console.log('异步读取文件数据: ' + data.toString())
})
})读取文件
语法:fs.read(fd, buffer, offset, length, position, callback)
fd:返回的文件描述符buffer:数据被写入的缓冲区offset:缓冲区写入的偏移位置length:读取的字节数position:从哪里开始读取callback:err、bytesRead、buffer
var fs = require('fs')
var buf = new Buffer(1024)
console.log('Going to open an existing file')
fs.open('input.txt', 'r+', function (err, fd) {
if (err) {
return console.error(err)
}
console.log('File opened successfully!')
console.log('Going to read the file')
fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {
if (err) {
console.log(err)
}
console.log(bytes + ' bytes read')
// Print only read bytes to avoid junk.
if (bytes > 0) {
console.log(buf.slice(0, bytes).toString())
}
})
})关闭文件
语法:fs.close(fd, callback)
fd:返回的文件描述符callback:回调函数,参数为 err
const fs = require('fs')
fs.open('demo.txt', 'r', function (err, fd) {
if (err) {
return console.error(err)
}
console.log('文件打开成功,文件描述符:' + fd)
fs.close(fd, function (err) {
if (err) {
return console.error(err)
}
console.log('文件关闭成功!')
})
})删除文件
语法:fs.unlink(path, callback)
path:文件路径callback:回调函数,参数为 err
const fs = require('fs')
fs.unlink('demo.txt', function (err) {
if (err) {
return console.error(err)
}
console.log('文件删除成功!')
})创建目录
语法:fs.mkdir(path, [mode], callback)
path:目录路径mode:目录权限callback:回调函数,参数为 err
const fs = require('fs')
fs.mkdir('/tmp/test', function (err) {
if (err) {
return console.error(err)
}
console.log('目录创建成功!')
})读取目录
语法:fs.readdir(path, callback)
path:目录路径callback:回调函数,参数为 err、files
const fs = require('fs')
fs.readdir('/tmp', function (err, files) {
if (err) {
return console.error(err)
}
files.forEach(function (file) {
console.log(file)
})
})阅读目录
语法:fs.readdirSync(path)
path:目录路径
const fs = require('fs')
fs.readdirSync('/tmp')删除目录
语法:fs.rmdir(path, callback)
path:目录路径callback:回调函数,参数为 err
const fs = require('fs')
fs.rmdir('/tmp/test', function (err) {
if (err) {
return console.error(err)
}
console.log('目录删除成功!')
})